package com.iatinspur.learn;

/**
 *
 * 9集 讲解 初始化阶段
 *  从jclasslib 中能看到 加载中 首先执行的是  public static int value 与 static{}  cinit
 *
 *  执行顺序
 *  1.其中 static final  如果是常量，那么直接在准备阶段就搞完了
 *  2.         cinit()                 >   init()
 *    static final > static > static{} >  {} > 构造方法
 *  3. 初始化块与初始化块   静态块  就看顺序了
 *
 * */
public class Learn_9_JVM {

    public static void main(String[] args) {
        // todo 第一题
        System.out.println("A");
        new Learn_9_JVM();
        new Learn_9_JVM();
        // todo 截至到现在的输出


        // todo 子类拿父类静态变量 只会让父类初始化
        // todo 子类初始化 会先初始化父类
        // todo new B001() 导致子类初始化  没有 new B001() 则只会父类初始化
        new B001();
        System.out.println(B001.a);



        // todo 数组创建不会导致对象初始化
        TestArr[] arr = new TestArr[10];



    }



    public Learn_9_JVM(){
        System.out.println("B");
    }

    {
        System.out.println("C");
    }

    static {
        System.out.println("D");
    }
}


class A001{
    static int a = 0;

    static {
        a = 1;
    }
}


class B001 extends A001{
    static {
        a = 2;
    }
}


class TestArr{
    static {
        System.out.println("初始化了没有");
    }
}
